package cn.tedu.store.portal.service;

import cn.tedu.store.commons.pojo.portal.entity.PortalCategoryEntity;
import cn.tedu.store.commons.pojo.portal.vo.HomeElementsVO;
import cn.tedu.store.commons.pojo.portal.vo.PortalCategoryTreeVO;
import cn.tedu.store.commons.pojo.portal.vo.ProductDetailVO;
import cn.tedu.store.commons.pojo.product.vo.*;
import cn.tedu.store.commons.web.JsonPage;;

import java.util.List;


/**
 * 首页展示信息业务接口
 *
 * @author RelentlessFlow
 * @version 0.0.1
 */
public interface IHomeElementService {
    /**
     * 获取首页营销推荐的信息
     * @return 封装的所有信息
     */
    HomeElementsVO getItem ();

    /**
     * 获取首页导航栏中的分类列表
     * @return 可显示在导航栏的分类列表
     */
    List<CategoryListItemVO> navbarCategory();

    /**
     * 获取首页品牌列表
     * @param pageSize 单页数据条数
     * @param pageNum 页码
     * @return 品牌列表
     */
    JsonPage<BrandListItemVO> brandList(Integer pageNum, Integer pageSize);

    /**
     * 获取指定分类的子分类信息列表
     * @param parentId 父类id
     * @param pageSize 单页数据条数
     * @param pageNum 页码
     * @return 子分类信息列表
     */
    JsonPage<CategoryListItemVO> subCategory(Long parentId, Integer pageNum, Integer pageSize);

    /**
     * 获取分类树
     * @return 分类树
     */
    PortalCategoryTreeVO<PortalCategoryEntity> categoryTree ();

    /**
     * 获取首页展示的商品列表
     * @param pageSize 单页商品数量
     * @param pageNum 页码
     * @return 商品列表
     */
    JsonPage<SpuListItemVO> productList(Integer pageNum, Integer pageSize);

    /**
     * 根据品牌获取商品列表
     * @param pageSize 单页商品数量
     * @param pageNum 页码
     * @return 商品列表
     */
    JsonPage<SpuListItemVO> productListByBrand(Long brandId, Integer pageNum, Integer pageSize);

    /**
     * 根据分类获取商品列表
     * @param pageSize 单页商品数量
     * @param pageNum 页码
     * @return 商品列表
     */
    JsonPage<SpuListItemVO> productListByCategory(Long categoryId, Integer pageNum, Integer pageSize);

    /**
     * 根据商品id获取商品详情
     * @param id 商品id
     * @return 商品详情
     */
    ProductDetailVO getDetailById(Long id);

    /**
     * 根据商品id获取所有Sku信息
     * @param spuId 商品id
     * @return Sku信息
     */
    List<SkuListItemVO> getSkuBySpuId(Long spuId);

    /**
     * 根据商品id获取属性信息
     * @param spuId 商品id
     * @return 属性列表
     */
    List<AttributeListItemVO> getAttributeBySpuId(Long spuId);


}
